MybatisPlus中代码生成器教程详解

您所在的位置:网站首页 mybatis 生成 MybatisPlus中代码生成器教程详解

MybatisPlus中代码生成器教程详解

2023-10-05 18:45| 来源: 网络整理| 查看: 265

MybatisPlus代码生成器 前序

一文带你了解MybatisPlus基本使用 Spring、SpringBoot整合Mybatis-Plus详细教程 MybatisPlus通⽤ CRUD接口 MybatisPlus之条件构造器 MybatisPlus中代码生成器教程详解 MybatisPlus之配置

前言

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。因此本文章介绍如何使用 MyBatis-Plus的代码生成器如何使用。

基于Spring整合Mybatis-Plus代码生成器 创建Spring项目并导入依赖 com.baomidou mybatis-plus-generator 3.4.0 org.freemarker freemarker 2.3.31 commons-lang commons-lang 2.6 mysql mysql-connector-java 5.1.47 org.slf4j slf4j-log4j12 在test文件下创建CodeGeneratorTest文件 public class CodeGeneratorTest { /** *

* 读取控制台内容 *

*/ @Test public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotBlank(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); //获取当前系统目录 String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("author"); //生成作者注释 gc.setOpen(false); //生成后是否打开资源管理器 gc.setFileOverride(false); //重新生成时文件是否覆盖 gc.setServiceName("%sService"); //去掉Service接口的首字母I gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型 gc.setSwagger2(false);//开启Swagger2模式 mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/mp?useUnicode=true&useSSL=false&characterEncoding=utf8"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("root"); //数据库类型 dsc.setDbType(DbType.MYSQL); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setModuleName("test"); //模块名,可以不设置 //放在哪个包下,父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名 pc.setParent("com.mybatis"); pc.setController("controller"); pc.setEntity("entity"); pc.setService("service"); pc.setMapper("mapper"); mpg.setPackageInfo(pc); // 自定义包配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 如果模板引擎是 freemarker String templatePath = "/templates/mapper.xml.ftl"; // 如果模板引擎是 velocity // String templatePath = "/templates/mapper.xml.vm"; // 自定义输出配置 List focList = new ArrayList(); // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); //数据库表映射到实体的命名策略 strategy.setNaming(NamingStrategy.underline_to_camel); //数据库表字段映射到实体的命名策略, 未指定按照 naming 执行 strategy.setColumnNaming(NamingStrategy.underline_to_camel); //自定义继承的Entity类全称,带包名 strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!"); //是否为lombok模型(默认 false) strategy.setEntityLombokModel(true); //生成 @RestController 控制器 strategy.setRestControllerStyle(true); // 公共父类 strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!"); // 写于父类中的公共字段 strategy.setSuperEntityColumns("id"); strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } } 打开目录就可以看到生成的文件

image.png

image.png

基于SpringBoot整合Mybatis-Plus代码生成器 创建SpringBoot项目

image.png

引入依赖 4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.5.RELEASE com.lagou springBoot-mp-generator 0.0.1-SNAPSHOT mp-generator Demo project for Spring Boot org.springframework.boot spring-boot-starter-test test com.baomidou mybatis-plus-boot-starter 3.1.1 com.baomidou mybatis-plus-generator 3.1.1 org.springframework.boot spring-boot-starter-freemarker mysql mysql-connector-java 5.1.47 org.slf4j slf4j-log4j12 org.springframework.boot spring-boot-maven-plugin 在test文件下创建CodeGeneratorTest文件 public class CodeGenerator { /** *

* 读取控制台内容 *

*/ public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotEmpty(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } /** * RUN THIS */ public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); final String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("author"); gc.setOpen(false); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&useSSL=false&characterEncoding=utf8"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("root"); mpg.setDataSource(dsc); // 包配置 final PackageConfig pc = new PackageConfig(); pc.setModuleName(scanner("模块名")); pc.setParent("com.mybatis.mp.generator"); mpg.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; List focList = new ArrayList(); focList.add(new FileOutConfig("/templates/mapper.xml.ftl") { @Override public String outputFile(TableInfo tableInfo) { // 自定义输入文件名称 return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); mpg.setTemplate(new TemplateConfig().setXml(null)); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); // strategy.setSuperEntityClass("com.baomidou.mybatisplus.samples.generator.common.BaseEntity"); strategy.setEntityLombokModel(true); // strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.BaseController"); strategy.setInclude(scanner("表名")); strategy.setSuperEntityColumns("id"); strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有! mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } } 测试并验证

image.png

image.png

代码生成器常用配置 数据源 dataSourceConfig 配置 dbQuery

数据库信息查询类 默认由 dbType 类型决定选择对应数据库内置实现 实现 IDbQuery 接口自定义数据库查询 SQL 语句 定制化返回自己需要的内容

dbType

数据库类型 该类内置了常用的数据库类型【必须】

schemaName

数据库 schema name 例如 PostgreSQL 可指定为 public

typeConvert

类型转换 默认由 dbType 类型决定选择对应数据库内置实现 实现 ITypeConvert 接口自定义数据库 字段类型 转换为自己需要的 java 类型,内置转换类型无法满足可实现 IColumnType 接口自定义

url

驱动连接的URL

driverName

驱动名称

username

数据库连接用户名

password

数据库连接密码

数据库表配置

isCapitalMode 是否大写命名

skipView 是否跳过视图

naming 数据库表映射到实体的命名策略

columnNaming 数据库表字段映射到实体的命名策略, 未指定按照 naming 执行

tablePrefix 表前缀

fieldPrefix 字段前缀

superEntityClass 自定义继承的Entity类全称,带包名

superEntityColumns 自定义基础的Entity类,公共字段

superMapperClass 自定义继承的Mapper类全称,带包名

superServiceClass 自定义继承的Service类全称,带包名

superServiceImplClass 自定义继承的ServiceImpl类全称,带包名

superControllerClass 自定义继承的Controller类全称,带包名

enableSqlFilter(since 3.3.1) 默认激活进行sql模糊表名匹配关闭之后likeTable与notLikeTable将失效,include和exclude将使用内存过滤 如果有sql语法兼容性问题的话,请手动设置为false 已知无法使用:MyCat中间件, 支持情况传送门(opens new window)

include 需要包含的表名,当enableSqlFilter为false时,允许正则表达式(与exclude二选一配置)

likeTable 自3.3.0起,模糊匹配表名(与notLikeTable二选一配置)

exclude 需要排除的表名,当enableSqlFilter为false时,允许正则表达式

notLikeTable 自3.3.0起,模糊排除表名

entityColumnConstant 【实体】是否生成字段常量(默认 false)

entityBuilderModel 【实体】是否为构建者模型(默认 false),自3.3.2开始更名为 chainModel

chainModel(since 3.3.2) 【实体】是否为链式模型(默认 false)

entityLombokModel 【实体】是否为lombok模型(默认 false)

3.3.2以下版本默认生成了链式模型,3.3.2以后,默认不生成,如有需要,请开启 chainModel

entityBooleanColumnRemoveIsPrefix Boolean类型字段是否移除is前缀(默认 false)

restControllerStyle 生成 @RestController 控制器

controllerMappingHyphenStyle 驼峰转连字符

entityTableFieldAnnotationEnable 是否生成实体时,生成字段注解

versionFieldName 乐观锁属性名称

#logicDeleteFieldName 逻辑删除属性名称

tableFillList 表填充字段 包名配置

parent 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名

moduleName 父包模块名

entity Entity包名

service Service包名

serviceImpl Service Impl包名

mapper Mapper包名

xml Mapper XML包名

controller Controller包名

pathInfo 路径配置信息

模板配置

entity Java 实体类模板

entityKt Kotin 实体类模板

service Service 类模板

serviceImpl Service impl 实现类模板

mapper mapper 模板

xml mapper xml 模板

controller controller 控制器模板

全局策略 globalConfig 配置 outputDir 生成文件的输出目录 默认值:D 盘根目录 fileOverride 是否覆盖已有文件 默认值:false open 是否打开输出目录 默认值:true #enableCache 是否在xml中添加二级缓存配置 默认值:false author 开发人员 默认值:null kotlin 开启 Kotlin 模式 默认值:false swagger2 开启 swagger2 模式 默认值:false activeRecord 开启 ActiveRecord 模式 默认值:false baseResultMap 开启 BaseResultMap 默认值:false baseColumnList 开启 baseColumnList 默认值:false dateType 时间类型对应策略 默认值:TIME_PACK 注意事项: 如下配置 %s 为占位符 entityName 实体命名方式 默认值:null 例如:%sEntity 生成 UserEntity mapperName mapper 命名方式 默认值:null 例如:%sDao 生成 UserDao xmlName Mapper xml 命名方式 默认值:null 例如:%sDao 生成 UserDao.xml serviceName service 命名方式 默认值:null 例如:%sBusiness 生成 UserBusiness serviceImplName service impl 命名方式 默认值:null 例如:%sBusinessImpl 生成 UserBusinessImpl controllerName controller 命名方式 默认值:null 例如:%sAction 生成 UserAction idType 指定生成的主键的ID类型 默认值:null 注入 injectionConfig 配置

map 自定义返回配置 Map 对象 该对象可以传递到模板引擎通过 cfg.xxx 引用

fileOutConfigList 自定义输出文件 配置 FileOutConfig 指定模板文件、输出文件达到自定义文件生成目的

fileCreate 自定义判断是否创建文件 实现 IFileCreate 接口 该配置用于判断某个类是否需要覆盖创建,当然你可以自己实现差异算法 merge 文件

initMap 注入自定义 Map 对象(注意需要setMap放进去)

更多Mybatis-Plus代码生成器配置请看官网。 MybatisPlus代码生成器官网



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3